/**
 * 模拟队列
 */

class Queue{
    // 构造函数是会在类被实力化的时候直接调用的
    constructor() {
        this.count = 0;
        this.lowestCount= 0;
        this.items = {}
    }


    enqueue(item) {
        this.items[this.count] = item
        this.count += 1
    }

    // 先进先出，弹出最先进去的值
    dequeue(){
        // 如果没有数据，
        if(this.count === 0){
            return false;
        }
        // 如果没有
        const result = this.items[this.lowestCount]
        delete this.items[this.lowestCount]

        this.lowestCount ++
        return result
    }

    // 获取最初的那个值
    peek() {
        // 如果数据量为0， 返回false
        if(this.count === 0) return false;
        if(this.isEmpty()) return undefined

        // 返回队列的最上面一个数据
        return this.items[this.lowestCount]

    }

    //判断是否是空
    isEmpty() {
    //    根据， count 和 lowestCount
        return this.count - this.lowestCount === 0;
    }

    size() {
        // 根据， 根据储存的数据量
        return this.count - this.lowestCount;
    }

    clear() {
        // 直接清除所有的数据
        this.count = 0;
        this.lowestCount = 0;
        this.items = {}
    }
    contains(item){
        for (const itemsKey in this.items) {
            if(this.items[itemsKey] === item) return true

        }
        return false;
    }

    toString() {
        // 输出队列中的所有数据
        const arr = []
        // forin 循环找到对象的key， 根据key输出value
        for (const itemKey in this.items) {
            arr.push(this.items[itemKey])
        }
        return arr
    }
}

const queue = new Queue();
queue.enqueue('haha')
console.log(queue.peek());
queue.enqueue('two')
queue.enqueue('three')
queue.enqueue('four')
queue.enqueue('five')
queue.dequeue()
console.log(queue);
console.log(queue.peek());
console.log(queue.isEmpty());
console.log(queue.size());
// queue.clear();
console.log(queue);
console.log(queue.toString());

console.log(queue.contains('three'));
console.log(queue.contains('three1'));


